package com.heliang.common;

import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.PixelFormat;
import android.graphics.drawable.Drawable;
import android.util.Log;

import com.heliang.util.Constants;
  
public class ImageDispose {  
      
      
      
    /** 
     * @param 将图片内容解析成字节数组 
     * @param inStream 
     * @return byte[] 
     * @throws Exception 
     */  
    public static byte[] readStream(InputStream inStream) throws Exception {  
        byte[] buffer = new byte[1024];  
        int len = -1;  
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();  
        while ((len = inStream.read(buffer)) != -1) {  
            outStream.write(buffer, 0, len);  
        }  
        byte[] data = outStream.toByteArray();  
        outStream.close();  
        inStream.close();  
        return data;  
  
    }  
    /** 
     * @param 将字节数组转换为ImageView可调用的Bitmap对象 
     * @param bytes 
     * @param opts 
     * @return Bitmap 
     */  
    public static Bitmap getPicFromBytes(byte[] bytes,  
            BitmapFactory.Options opts) {  
        try {
        	if (bytes != null)  
                if (opts != null)  
                    return BitmapFactory.decodeByteArray(bytes, 0, bytes.length,  
                            opts);  
                else  
                    return BitmapFactory.decodeByteArray(bytes, 0, bytes.length); 
		} catch (Exception e) {
			// TODO: handle exception
			Log.e(Constants.TAG, e.getMessage());
		}
    	 
        return null;  
    }  
    /** 
     * @param 图片缩放 
     * @param bitmap 对象 
     * @param w 要缩放的宽度 
     * @param h 要缩放的高度 
     * @return newBmp 新 Bitmap对象 
     */  
    public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h){  
        int width = bitmap.getWidth();  
        int height = bitmap.getHeight();  
        Matrix matrix = new Matrix();  
        float scaleWidth = ((float) w / width);  
        float scaleHeight = ((float) h / height);  
        matrix.postScale(scaleWidth, scaleHeight);  
        Bitmap newBmp = Bitmap.createBitmap(bitmap, 0, 0, width, height,  
                matrix, true);  
        return newBmp;  
    }  
      
    /** 
     * 把Bitmap转Byte 
     * @Author HEH 
     * @EditTime 2010-07-19 上午11:45:56 
     */  
    public static byte[] Bitmap2Bytes(Bitmap bm){  
        ByteArrayOutputStream baos = new ByteArrayOutputStream();  
        bm.compress(Bitmap.CompressFormat.PNG, 100, baos);  
        return baos.toByteArray();  
    }  
    /** 
     * 把字节数组保存为一个文件 
     * @Author HEH 
     * @EditTime 2010-07-19 上午11:45:56 
     */  
    public static File getFileFromBytes(byte[] b, String outputFile) {  
        BufferedOutputStream stream = null;  
        File file = null;  
        try {  
            file = new File(outputFile);  
            FileOutputStream fstream = new FileOutputStream(file);  
            stream = new BufferedOutputStream(fstream);  
            stream.write(b);  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            if (stream != null) {  
                try {  
                    stream.close();  
                } catch (IOException e1) {  
                    e1.printStackTrace();  
                }  
            }  
        }  
        return file;  
    }  
          
    /**
     * Drawable转成bitmap
     * @param drawable
     * @return
     */
    public static Bitmap drawableToBitmap(Drawable drawable) {  
        Bitmap bitmap = Bitmap  
                        .createBitmap(  
                                        drawable.getIntrinsicWidth(),  
                                        drawable.getIntrinsicHeight(),  
                                        drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888  
                                                        : Bitmap.Config.RGB_565);  
        Canvas canvas = new Canvas(bitmap); 
        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());  
        drawable.draw(canvas);  
	
        return bitmap;  
	} 
    
    /**
     * Drawable转Bitmap
     * @param drawable 
     * @param w 指定的宽
     * @param h 指定的高
     * @return
     */
    public static Bitmap drawableToBitmap(Drawable drawable,int w,int h) {  
        Bitmap bitmap = Bitmap  
                        .createBitmap(  
                                        w,  
                                        h,  
                                        drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888  
                                                        : Bitmap.Config.RGB_565);  
        Canvas canvas = new Canvas(bitmap); 
        drawable.setBounds(0, 0, w, h);  
        drawable.draw(canvas);  
	
        return bitmap;  
	} 
    
}  
